package com.cskaoyan.javase.oop3._3local._0introduction;

/**
 * 局部内部类是定义在一个方法或者一个作用域里面的类，简单来说，将局部内部类看成是局部变量即可，该类的有效范围仅在作用域内部。（这意味着要创建它的对象，必须在作用域内部创建）
 *
 * 从语法和具体使用上看，局部内部类和成员内部类很相似，有点类似于直接把一个成员内部类放进局部位置，语法是：
 * // 局部位置
 * class Inner{
 * }
 * // 局部位置
 *
 * 自身特点:
 * 主要从以下几个角度分析：
 * 访问权限修饰符: 和局部变量一样,它已经被作用域限制死了作用范围,不需要访问权限修饰
 *      并且它也不能用static修饰
 * 成员特点: 和成员内部类完全一致,没有静态声明,但是可以存在字面值常量赋值的全局常量
 *
 * 继承和实现: 可以继承,可以实现,而实际上,局部内部类在绝大多数情况下都是为了继承和实现而设计的.
 *
 * @since 11:33
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class EnclosedClazz {
    static {
        // 局部位置
    }

    {
        // 局部位置
    }

    public void test2(){

    }

    public void test() {
        // 局部位置的局部内部类
        class InnerClazz {
            int a;
            private int b = 10;
            // static int c = 20;
            static final int D = 30;
            void test(){}
            // static void test2(){}

            public InnerClazz() {
            }

            public InnerClazz(int a, int b) {
                this.a = a;
                this.b = b;
            }
            {}
            // static {}
        }
        // InnerClazz只在方法内部生效,所以必须在方法内部内部创建它的对象
        // 否者在方法外部是绝无可能创建对象的
    }
}